本篇是看 Concurrency is not Parallelism 的心得
Concurrency is not Parallelism - Rob Pike 藉由 Parallelism 的對比,來講解什麼是 Concurrency.
什麼是 Concurrency?
Programming as the composition of independently excuting process. (此 process 非 linux process,它是更廣義的)
Concurrency 的重點放在各個不相依 process 的組合
什麼是 Parallelism?
Programming as the simultaneous execution of (possibly related) computation.
Parallelism 的重點是有多個同時
執行的運算。
到這我也還不懂 Rob Pike 想說什麼?
接著 Rob Pike 放到下一頁投影片
這時候我開始懂了,concurrency 指的是一種程式架構,也是一種思考方式,也可以說是解決問題的一種方式
。Rob Pike 馬上舉出了一個例子:OS 可以同時 (這裡的同時是指 concurrent) 管理的滑鼠,鍵盤,螢幕,並且正常的運作,這就是一個 concurrent 的設計的實際例子,但請注意:一個 OS 不一定要同時 (Parallel) 管理這些設備,這台電腦可以是單核心的。這句話很玄,但也和投影片上所說的相互呼印, Concurrency provides a way to structure a solution to solve a problem that may (but not necessarily) be parallelizable.
,cocurrent 提供了解決問題的方法,這解決問題的方法可以是 parallel。
這邊我在 jserv 的文章也找到了更好的解釋 Toward Concurrency:
Concurrency 是指程式架構,將程式拆開成多個可獨立運作的工作,像是驅動程式都可獨立運作,但不需要平行化
Parallelism 是指程式執行,同時執行多個程式。Concurrency 可能會用到 parallelism,但不一定要用 parallelism 才能實現 concurrency。eg:Vector dot product
Go 提供了一套 concurrent 的工具,這工具就是 goroutine 和 channel,我猜 Rob Pike 想說的是,你應該要 think concurrency,有了這個思考模式加上 go 提供的工具,將會設計出更有效率的程式。
我想這也是 go 的設計方法之一:只要有辦法把一個程式執行,拆分成幾個不相依的執行個體,你就可以使用 goroutine 加上 channel 設計出 concurrent 的程式。
明日的文章,就把這影片的後半段的程式實例讀一讀寫個心得。